<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>33.对象工厂派生对象并实现继承</title>
</head>

<body>
</body>

<script>
  // 在原型继承基础上，将对象的生成使用函数完成，并在函数内部为对象添加属性或方法。


  // 父级
  function User (name, age) {
    this.name = name;
    this.age = age;
  }
  User.prototype.show = function () {
    console.log(this.name, this.age);
  }

  function admin (name, age) {
    //将对象的生成使用函数完成
    const instance = Object.create(User.prototype);
    // 使用父类构造函数的初始属性
    User.call(instance, name, age);
    // 增加方法
    instance.role = function () {
      console.log('role');
    }
    return instance;
  }
  let hd = admin('xj', 19);
  hd.show();//xj 19

  hd.role(); //role

  function member (name, age) {
    //将对象的生成使用函数完成
    const instance = Object.create(User.prototype);
    // 使用父类构造函数的初始属性
    User.call(instance, name, age);
    // 增加方法
    instance.rule = function () {
      console.log('规则 rule');
    }
    return instance;
  }

  let lisi = member('lisi',20);
  lisi.show();//lisi 20
  lisi.rule(); //规则 rule
</script>

</html>